/**
 * Classe de gestion d'une partie
 * @author Lo�c Mounier, Thomas Picard, Marianne Grandemenge
 */

package Modele;

import java.io.IOException;
import java.net.MulticastSocket;
import java.util.ArrayList;

public class Partie {
	public final static Carte carte = new Carte();
	private ArrayList<Tour> listeTour;
	private Configuration configuration;
	private ArrayList<Joueur> listeJoueur;
	public static MulticastSocket castSocket;

	public Partie() {
		System.out.println("---Creation de la partie---");
		this.listeTour = new ArrayList<Tour>();
		configuration = new Configuration();
		listeJoueur = new ArrayList<Joueur>();
		try {
			// TODO voir pour ajouter le bon port
			castSocket = new MulticastSocket(5000);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void addJoueurChat(Joueur j) {
		try {
			castSocket.joinGroup(j.getAdr());
		} catch (IOException e) {
			System.out.println("Erreur lors de l'entree au chat");
			e.printStackTrace();
		}
	}

	public void setConfiguation(Configuration config) {
		System.out.println("---Redefinition de la configuration---");
		configuration = config;
	}

	public void ajouterJoueur(Joueur j) {
		listeJoueur.add(j);
		addJoueurChat(j);
	}

	public void supprimerJoueur(Joueur j) {
		listeJoueur.remove(j);
	}

	public static boolean regionExist(String nomReg) {
		return carte.containsKey(nomReg.toLowerCase());
	}

	public static Region getRegion(String nomReg) {
		return carte.get(nomReg.toLowerCase());
	}

	public Region getRegionWithPos(Coordonnee coo) {
		Region res = null;
		for (String mapKey : carte.keySet()) {
			Region region = carte.get(mapKey);
			if (region.getCoordoUnite().equals(coo) || region.getCoordoRavitaillement().equals(coo)) {
				res = region;
				break;
			}
		}
		return res;

	}

	public void play() {
		// Configuration partie
		// Definir la nb de joueur
		// Definir la durée des phases
		// Définir la dure total de la partie
		// Définir le nombre d'arsenaux à controler pour gagner
		// Tant que !fin de partie
		// Négociation
		// Redaction des ordres
		// Arbitrage
		// Dispersion/Retraite
		// Ajustement d'automne
	}

}
